<?php
namespace datos;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of NotaVentaDao
 *
 * @author Jorge
 */
class NotaVentaDao {
	//put your code here
	private $conexion;

	public function __construct($conexion) {
		$this->conexion = $conexion;
	}

	public function notaVentaPdf($idNotaVenta){
		$notaVenta = array();
		$productos = array();
		
		$sql = "CALL NotaVentaPdf( 
				    :id				   
				    ,@codNotaVenta	   					
					,@codUsuario 	   
					,@fechaIngreso 	   
					,@formaPago 		   
					,@fechaVenc 		   
					,@ordenCompra 	   
					,@neto 			   
					,@iva 			   
					,@total 			   
					,@totalPalabras 	   
					,@comentarios 	   
					,@estado 		   
					,@codCli 		   
					,@rutCli 		   
					,@nombreCli 		   
					,@dirCli 		   
					,@telCli 		   
					,@faxCli 		   
					,@mailCli 		   
					,@comunaCli 	 	   
					,@codVendedor 	   
					,@nombreVendedor    
					,@errId 			   
					,@errGlosa 		   )";

		$consulta = $this->conexion->prepare($sql);
		$consulta->bindParam(":id", $idNotaVenta, \PDO::PARAM_INT);
		$consulta->execute();		
		$productos = $consulta->fetchAll(\PDO::FETCH_ASSOC);
		$consulta->closeCursor();
		$sql = "select 	@codNotaVenta   as codNotaVenta 
						,@codUsuario 	as codUsuario   
						,@fechaIngreso 	as fechaIngreso 
						,@formaPago 	as formaPago 	
						,@fechaVenc 	as fechaVenc 	
						,@ordenCompra 	as ordenCompra 	
						,@neto 			as neto 		
						,@iva 			as iva 			
						,@total 		as total 		
						,@totalPalabras as totalPalabras
						,@comentarios 	as comentarios 	
						,@estado 		as estado 		
						,@codCli 		as codCli 		
						,@rutCli 		as rutCli 		
						,@nombreCli 	as nombreCli 	
						,@dirCli 		as dirCli 		
						,@telCli 		as telCli 		
						,@faxCli 		as faxCli 		
						,@mailCli 		as mailCli 		
						,@comunaCli 	as comunaCli 	
						,@codVendedor 	as codVendedor 	
						,@nombreVendedor as nombreVendedor
						,@errId 		 as errId 		 
						,@errGlosa 		 as errGlosa";
		$notaVenta = $this->conexion->query($sql)->fetch(\PDO::FETCH_ASSOC);		
		$notaVenta['productos'] = $productos;		
		return $notaVenta;
    }
    
    public function notaVentaGetById($idNotaVenta){
    	$notaVenta = array();
    	$productos = array();
    	//$sql =  "SET @codNota = " . $idNotaVenta . ";";
    	$sql = "CALL NotaVentaGetById(
				    :id
				    ,@codNotaVenta    
					,@codUsuario     
					,@fechaIngreso   
					,@formaPago      
					,@fechaVenc      
					,@ordenCompra    
					,@neto           
					,@iva            
					,@total          
					,@totalPalabras  
					,@comentarios    
					,@estado         
					,@codCli         
					,@rutCli         
					,@nombreCli      
					,@dirCli         
					,@telCli         
					,@faxCli         
					,@mailCli        
					,@comunaCli      
					,@codVendedor    
					,@nombreVendedor 
					,@errId
					,@errGlosa)";
    	/*		$consulta = $this->conexion->prepare($sql);
    		$consulta->execute(array($idNotaVenta));
    		$productos = $consulta->fetchAll();*/
    	$consulta = $this->conexion->prepare($sql);
    	$consulta->bindParam(":id", $idNotaVenta, \PDO::PARAM_INT);
    	$consulta->execute();
    	$productos = $consulta->fetchAll(\PDO::FETCH_ASSOC);
    	$consulta->closeCursor();
    	$sql = "select 	@codNotaVenta   as codNotaVenta
						,@codUsuario 	as codUsuario
						,@fechaIngreso 	as fechaIngreso
						,@formaPago 	as formaPago
						,@fechaVenc 	as fechaVenc
						,@ordenCompra 	as ordenCompra
						,@neto 			as neto
						,@iva 			as iva
						,@total 		as total
						,@totalPalabras as totalPalabras
						,@comentarios 	as comentarios
						,@estado 		as estado
						,@codCli 		as codCli
						,@rutCli 		as rutCli
						,@nombreCli 	as nombreCli
						,@dirCli 		as dirCli
						,@telCli 		as telCli
						,@faxCli 		as faxCli
						,@mailCli 		as mailCli
						,@comunaCli 	as comunaCli
						,@codVendedor 	as codVendedor
						,@nombreVendedor as nombreVendedor
						,@errId 		 as errId
						,@errGlosa 		 as errGlosa";
    	$notaVenta = $this->conexion->query($sql)->fetch(\PDO::FETCH_ASSOC);
    	$notaVenta['productos'] = $productos;
    	return $notaVenta;
    }
    
    
    public function notaVentaConsulta($opcionConsulta, $codUsuario, $fechaInicio, $fechaFin, $buscado, $limite){
    	$notasVentas = array();    	    	
    	$sql = "CALL NotaVentaConsulta(
				    :opcionConsulta  
					,:codUsuario 		
					,:fechaInicio 	
					,:fechaFin 		
					,:buscado 		
					,:limite		    					 	
					,@errId
					,@errGlosa 		   )";
    	
    	$consulta = $this->conexion->prepare($sql);
    	$consulta->bindParam(":opcionConsulta", $opcionConsulta, \PDO::PARAM_STR);
    	$consulta->bindParam(":codUsuario", $codUsuario, \PDO::PARAM_STR);
    	$consulta->bindParam(":fechaInicio", $fechaInicio);
    	$consulta->bindParam(":fechaFin", $fechaFin);
    	$consulta->bindParam(":buscado", $buscado,\PDO::PARAM_STR);
    	$consulta->bindParam(":limite", $limite,\PDO::PARAM_INT);
    	$consulta->execute();
    	$notasVentas = $consulta->fetchAll(\PDO::FETCH_ASSOC);
    	$consulta->closeCursor();
    	$sql = "select 	@errId 		as errId
						,@errGlosa 	as errGlosa";
    	$result = $this->conexion->query($sql)->fetch(\PDO::FETCH_ASSOC);
    	$result['resultados'] = $notasVentas;
    	return $result;
    }
    
    public function ingresarNotaVenta($notaVenta, $carrito){
        try{  
            $this->conexion->beginTransaction();
            //inserta datos nota de venta
            $sql = "INSERT INTO nota_venta 
                    (cod_usuario, 
                    cod_cli,
                    cod_vendedor, 
                    fecha_ingreso, 
                    forma_pago, 
                    fecha_vencimiento, 
                    orden_compra, 
                    comentarios, 
                    estado)
                    VALUES 
                    ('$notaVenta->codUsuario',
                     '$notaVenta->codigoCliente',
                     '$notaVenta->codVendedor',
                      NOW(),
                     '$notaVenta->pago',
                     DATE_ADD(now(),INTERVAL $notaVenta->pago DAY),
                     '$notaVenta->ordenCompra',
                     '$notaVenta->comentario',
                     'Pendiente')";
            $consulta = $this->conexion->prepare($sql);
            $consulta->execute();
            $codigoNotaVenta = $this->conexion->lastInsertId();
            //$consulta = mysql_query ( $sql, $conexion ) or die ( "Error en la consulta: " . mysql_error () );


            //inserta productos nota de venta
            $sql = "INSERT INTO producto_nota_venta 
                    (cod_nota_venta,
                    cod_prod,
                    cantidad,
                    descuento,
                    neto,
                    iva,
                    total,
                    precio_venta_unitario,
                    costo)
                    VALUES 
                    (:codigo_nota_venta,
                    :cod_prod,
                    :cantidad,
                    :descuento,
                    :neto,
                    :iva,
                    :total,
                    :precio_venta_unitario,
                    :costo)";
            $consulta = $this->conexion->prepare($sql);
            $suma = 0;
            for($i = 0; $i < $carrito->getnum_producto (); $i ++) {
                if ($carrito->getcod_prod ( $i ) != - 1 && $carrito->getcantidad ( $i ) > 0) {					
                    $suma = $suma + $carrito->getneto ( $i );
                    $consulta->bindParam(":codigo_nota_venta", $codigoNotaVenta);
                    $consulta->bindParam(":cod_prod", $carrito->getcod_prod($i));
                    $consulta->bindParam(":cantidad", $carrito->getcantidad($i));
                    $consulta->bindParam(":descuento", $carrito->getdescuento($i));
                    $consulta->bindParam(":neto", $carrito->getneto($i));
                    $consulta->bindParam(":iva", $carrito->getiva($i));
                    $consulta->bindParam(":total", $carrito->gettotal($i));
                    $consulta->bindParam(":precio_venta_unitario", $carrito->getprecio_venta($i));
                    $consulta->bindParam(":costo",$carrito->getcosto($i));
                    $consulta->execute();                 
                }
            }
            
            // Actualiza valores de la nota de venta
            $iva = round ( $suma * \utiles\Constantes::$VALOR_IVA);
            $total = round ( $suma * (\utiles\Constantes::$VALOR_IVA + 1) );            
            $nw = new \Numbers_Words();
            $palabras = $nw->toWords ( $total, "es" ) . " pesos";
            $sql =  "UPDATE nota_venta
                    SET total = :total,
                        neto  = :suma,
                        iva   = :iva,
                        total_palabras = :palabras
                    WHERE cod_nota_venta = :codigo_nota_venta";
            $consulta = $this->conexion->prepare($sql);
            $consulta->bindParam(":total", $total);
            $consulta->bindParam(":suma", $suma);
            $consulta->bindParam(":iva", $iva);
            $consulta->bindParam(":palabras", $palabras,  \PDO::PARAM_STR);
            $consulta->bindParam(":codigo_nota_venta", $codigoNotaVenta);
            $consulta->execute();           
            $this->conexion->commit();
            return $codigoNotaVenta;
        
        } catch (\Exception $ex) {
            throw  $ex;
        }	
    }       

}
